﻿Imports System.IO

Public Class ControlMenuOpciones
    Inherits System.Web.UI.Page

    Public Shared param1(6) As ADODB.Parameter

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Not Page.IsPostBack Then
            FG.culturaPaginas()
            FG.CargaCombo("traerPerfiles", cboPerfilID)
        End If
        llena_DataGrid()

    End Sub

    Private Sub llena_DataGrid()
        Dim Rs As ADODB.Recordset
        Dim rs1 As ADODB.Recordset
        Dim Dt As New DataTable

        ''''vacio la grilla
        gvMenuOpciones.DataBind()
        '-------------------

        Rs = Datos.TraerTodos("TraerMenuOpciones", Nothing, "")
        rs1 = Datos.EjecutarRecordset("select top 1 menuid +1 from MenuOpciones order by menuid desc", "traer menuid")

        If Not rs1.RecordCount = 0 Then
            lblCount.Text = rs1.Fields(0).Value
        End If

        Dt = FG.cargaUnDataTable(Rs)

        gvMenuOpciones.DataSource = Dt
        gvMenuOpciones.DataBind()
    End Sub

    Sub limpiarControles()
        txtMenuID.Text = ""
        txtDescripcion.Text = ""
        txtPadreID.Text = ""
        txtPosicion.Text = ""
        txtURLPagina.Text = ""
        cboPerfilID.SelectedIndex = 0
    End Sub

    Function comparar() As Boolean

        Dim param(0) As ADODB.Parameter
        Dim rs As ADODB.Recordset

        param(0) = New ADODB.Parameter
        param(0).Name = "@menuid"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(0).Type = ADODB.DataTypeEnum.adInteger  '<--tipo de dato 
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(0).Value = CInt(txtMenuID.Text())   ' <--el valor que le pasamos a la base
        param(0).Size = 255 'Si el dato es string ,, lleva longitud , los datos numerico no hacen falta ,,

        rs = Datos.TraerTodos("comparaIDMenuOpciones", param, "comparar MenuOpciones") '

        comparar = CBool(rs.Fields(0).Value.ToString())

    End Function

    Protected Sub btnGrabar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnGrabar.Click
        Dim i As Integer = 8 'Numero de campos
        Dim param(i - 1) As ADODB.Parameter
        Dim Resultado As Boolean
        Dim bcompara As Boolean = False
        Dim MsgAnswer As Single

        'txtMenuID.Text
        'txtDescripcion.Text
        'txtPadreId.Text
        'txtPosicion.Text
        'txtURLPagina.Text
        'cboPerfilID.Text


        'txtMenuID
        param(0) = New ADODB.Parameter
        param(0).Name = "@menuid"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(0).Type = ADODB.DataTypeEnum.adInteger '<--tipo de dato 
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(0).Value = txtMenuID.Text  ' <--el valor que le pasamos a la base
        param(0).Size = 50 'Si el dato es string ,, lleva longitud , los datos numerico no hacen falta ,,
        'txtDescripcion
        param(1) = New ADODB.Parameter
        param(1).Name = "@descripcion"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(1).Type = ADODB.DataTypeEnum.adVarChar '<--tipo de dato 
        param(1).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(1).Value = txtDescripcion.Text  ' <--el valor que le pasamos a la base
        param(1).Size = 50 'Si el dato es string ,, lleva longitud , los datos numerico no hacen falta ,,
        'txtPadreId
        param(2) = New ADODB.Parameter
        param(2).Name = "@padreid"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(2).Type = ADODB.DataTypeEnum.adInteger '<--tipo de dato 
        param(2).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(2).Value = txtPadreID.Text  ' <--el valor que le pasamos a la base
        param(2).Size = 50 'Si el dato es string ,, lleva longitud , los datos numerico no hacen falta ,,
        'txtPosicion
        param(3) = New ADODB.Parameter
        param(3).Name = "@posicion"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(3).Type = ADODB.DataTypeEnum.adInteger '<--tipo de dato 
        param(3).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(3).Value = txtPosicion.Text  ' <--el valor que le pasamos a la base
        param(3).Size = 50 'Si el dato es string ,, lleva longitud , los datos numerico no hacen falta ,,
        'habilitado
        param(4) = New ADODB.Parameter
        param(4).Name = "@habilitado"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(4).Type = ADODB.DataTypeEnum.adBoolean '<--tipo de dato 
        param(4).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(4).Value = True ' <--el valor que le pasamos a la base
        param(4).Size = 2 'Si el dato es string ,, lleva longitud , los datos numerico no hacen falta ,,
        'txtURLPagina
        param(5) = New ADODB.Parameter
        param(5).Name = "@url"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(5).Type = ADODB.DataTypeEnum.adVarChar '<--tipo de dato 
        param(5).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(5).Value = IIf(txtMenuID.Text = txtPadreID.Text, "", txtURLPagina.Text)  ' <--el valor que le pasamos a la base
        param(5).Size = 100 'Si el dato es string ,, lleva longitud , los datos numerico no hacen falta ,,
        'usuariocreacion
        param(6) = New ADODB.Parameter
        param(6).Name = "@usuariocreacion"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(6).Type = ADODB.DataTypeEnum.adVarChar '<--tipo de dato 
        param(6).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(6).Value = IIf(User.Identity.Name = "", "", User.Identity.Name) ' <--el valor que le pasamos a la base
        param(6).Size = 15 'Si el dato es string ,, lleva longitud , los datos numerico no hacen falta ,,
        'cboPerfilID
        param(7) = New ADODB.Parameter
        param(7).Name = "@perfilid"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(7).Type = ADODB.DataTypeEnum.adInteger  '<--tipo de dato 
        param(7).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(7).Value = traerIDPerfil(cboPerfilID.Text)  ' <--el valor que le pasamos a la base
        param(7).Size = 2 'Si el dato es string ,, lleva longitud , los datos numerico no hacen falta ,,

        If comparar() = True Then

            MsgAnswer = MsgBox("¿Desea modificar el Menu de Opciones a: " + txtDescripcion.Text + "?")
            bcompara = True

        Else
            Resultado = Datos.Agregar("agregarMenuOpciones", param, "ControlMenuOpciones.aspx, btnGuardar_click")
            limpiarControles()
            llena_DataGrid()
            If Resultado = True Then
                'MsgBox(" SE " + IIf(bcompara = True, "AGREGO", "AGREGO"), MsgBoxStyle.Information, "")
                limpiarControles()
                Exit Sub
            Else
                'MsgBox("no se " + IIf(bcompara = True, "AGREGO", "AGREGO"), MsgBoxStyle.Critical, "ERROR")
                Exit Sub
            End If

        End If

        If Resultado = True Then
            'MsgBox(" SE " + IIf(bcompara = True, "MODIFICO", "MODIFICO"), MsgBoxStyle.Information, "")
            limpiarControles()
        Else
            'MsgBox("no se " + IIf(bcompara = True, "MODIFICO", "MODIFICO"), MsgBoxStyle.Critical, "ERROR")
        End If

    End Sub

    Private Sub gvMenuOpciones_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvMenuOpciones.PageIndexChanging
        gvMenuOpciones.PageIndex = e.NewPageIndex
        llena_DataGrid()
    End Sub

    Private Sub gvMenuOpciones_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles gvMenuOpciones.RowDeleting
        Dim row As GridViewRow = gvMenuOpciones.Rows(e.RowIndex)
        'row.Cells(2).Text -- menuid
        Dim i As Integer = 1
        Dim param(i - 1) As ADODB.Parameter
        Dim Resultado As Boolean
        Dim MsgAnswer As Single

        'menuid int
        param(0) = New ADODB.Parameter
        param(0).Name = "@menuid"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(0).Type = ADODB.DataTypeEnum.adInteger '<--tipo de dato 
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(0).Value = row.Cells(2).Text  ' <--el valor que le pasamos a la base
        param(0).Size = 50 'Si el dato es string ,, lleva longitud , los datos numerico no hacen falta ,,

        MsgAnswer = MsgBox("¿Desea borrar el Menu de Opciones con menuid: " + row.Cells(2).Text + "?", MsgBoxStyle.YesNo, "Borrar Menu de Opciones")

        If MsgAnswer = vbYes Then
            Resultado = Datos.Modificar("borrarMenuOpciones_x_menuid", param, "ControlMenuOpciones.aspx, btnGuardar_click")
            If Resultado = False Then
                MsgBox("no se puede borrar menuid: " + row.Cells(2).Text + ", es un menu padre", MsgBoxStyle.Information, "Borrar Menu de Opciones")
            Else
                llena_DataGrid()
            End If
        Else
            limpiarControles()
            Exit Sub
        End If

    End Sub

    Protected Sub gvMenuOpciones_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles gvMenuOpciones.SelectedIndexChanged
        Dim row As GridViewRow = gvMenuOpciones.SelectedRow

        txtMenuID.Text = IIf(row.Cells(2).Text = "&nbsp;", "", row.Cells(2).Text)
        txtDescripcion.Text = IIf(row.Cells(3).Text = "&nbsp;", "", row.Cells(3).Text)
        txtPadreID.Text = IIf(row.Cells(4).Text = "&nbsp;", "", row.Cells(4).Text)
        txtPosicion.Text = IIf(row.Cells(5).Text = "&nbsp;", "", row.Cells(5).Text)
        txtURLPagina.Text = IIf(row.Cells(7).Text = "&nbsp;", "", row.Cells(7).Text)
        cboPerfilID.SelectedIndex = IIf(row.Cells(8).Text = "&nbsp;", 0, cboPerfilID.Items.IndexOf(cboPerfilID.Items.FindByValue(row.Cells(8).Text)))

    End Sub

    Function traerIDPerfil(ByVal cPerfil As String) As Integer
        Dim param(0) As ADODB.Parameter
        Dim Rs As ADODB.Recordset '<----variable donde se van a cargar los datos que vengan de la base 

        If cboPerfilID.Text = "" Then
            Return 0
            Exit Function
        End If


        param(0) = New ADODB.Parameter
        param(0).Name = "@perfil"  '<--nombre del parametro q esta en la base,, no es excencial es para q la funcion error sepa de que parametro hablamos 
        param(0).Type = ADODB.DataTypeEnum.adVarChar '<--tipo de dato 
        param(0).Direction = ADODB.ParameterDirectionEnum.adParamInput '<---eesto no se toca es siempre igual
        param(0).Value = cboPerfilID.Text   ' <--el valor que le pasamos a la base
        param(0).Size = 50 'Si el dat

        Rs = Datos.TraerTodos("traerIdPerfil", param, "traerIDPerfil")

        If Rs.RecordCount > 0 Then
            Rs.MoveFirst()
            Return Rs.Fields(0).Value.ToString
        Else
            Return 0
        End If

    End Function


    Private Sub btnPagina_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPagina.Click
        If (FileUpload1.HasFile) Then
            txtURLPagina.Text = "~/" + FileUpload1.FileName
        Else
            txtURLPagina.Text = ""
        End If
    End Sub

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        limpiarControles()
    End Sub

End Class
